#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *twoSum1(int *nums, int numsSize, int target, int *returnSize)
{
    return returnSize;
}

int *twoSum2(int *nums, int numsSize, int target, int *returnSize)
{
    return returnSize;
}

/*
生成随机两数之和的数据
*/
void get_seed_data(int length, int range, int *ret)
{
    srand((unsigned)time(NULL));
    for (int i = 0; i < length; i++)
    {
        ret[i] = rand() & (range - 1);
    }
    // 随机生成一个目标值
    int target = (rand() & (range - 1)) + 10;

    // 生成第一个目标值
    int num1 = 0;
    do
    {
        num1 = rand() & (range - 1);
    } while (target - num1 < 0);

    int index1 = rand() & (length - 1);
    ret[index1] = num1;

    int index2;
    do
    {
        index2 = rand() & (length - 1);
    } while (index1 == index2);

    ret[index2] = target - num1;

    printf("target=%d    index=%d,num1=%d,    index2%d num2=%d\n", target, index1, ret[index1], index2, ret[index2]);
}

/*
1. 两数之和

给定一个整数数组nums和一个整数目标值target，请你在该数组中找出和为目标值target的那两个整数，并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

示例 1：
输入：nums = [2,7,11,15], target = 9
输出：[0,1]
解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
*/
int main(int argc, char const *argv[])
{
    int ret[10];
    // int *ret1 = ret;
    // int **ret1 = &ret;
    get_seed_data(10, 50, ret);
    for (int i = 0; i < 10; i++)
    {
        printf("%d\n", ret[i]);
    }

    return 0;
}
